#include "bluetooth_task.h"

TaskHandle_t bluetoothHandler;
extern QueueHandle_t configMsgQueue;//消息队列
int checkMsgType(int type);


int checkMsgType(int type){

    return (type==MSG_TYPE_CONFIG||type==MSG_TYPE_CONFIG_NETWORK)?1:0;

}
void init_bluetooth_task()
{
    //初始化usart3
    usart3_init(9600);
}
//每秒钟进行一次数据的采集
void bluetooth_task(void *param){
    char buff[200];
    
    while (1)
    {
        //第一步
        //从usart3中接受数据--并且控制led灯
        /*
        memset(buff,0,200);//把数据进行清空，把200字节空间设为0
        printf("usart3 recv data start \r\n");
        int index=0;
        while (1)
        {
            while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET);
            char res =USART_ReceiveData(USART3);
            if (res=='\0') continue;//一直读空的情况不要
            if (res=='\n')//已经结束
            {
                buff[index]="\0";
                break;
            }else
            {
                buff[index]=res;
            }
            index++;
        }
        printf("usart3 recv data:%s \r\n",buff);*/


        //获取到的原始数据
        char *data="{\"msgType\":1,\"content\":{\"state\":15,\"temp\":20,\"humi\":30,\"somke\":60,\"suns\":80}}";
        //解析数据
        int msgType = parseMsgType(data);

        //第二步
        /*
        //检查消息是否合法
        if (checkMsgType(msgType))
        {
            //通过消息队列把data数据传递过去
            if(xQueueSend(configMsgQueue,&data,portMAX_DELAY)==pdTRUE)
            {
                printf("send msg succcess \r\n");
            }else
            {
               printf("send msg error \r\n");
            } 
        }else//发送过来的消息是错的
        {
            printf(" msg type error \r\n");
        }  
        */

        vTaskDelay(1000);
    }
} 

void create_bluetooth_task()
{
    //创建一个任务  这个任务的目的就是去创建其他的任务
    //创建任务
    BaseType_t res= xTaskCreate(bluetooth_task,
                "bluetooth_task",
                128,
                NULL,
                2,
                &bluetoothHandler);

}
  // 参数 1: 任务函数
  // 参数 2: 任务描述名
  // 参数 3: 任务堆栈深度               
  // 参数 4: 传递给任务的参数
  // 参数 5: 任务优先级
  // 参数 6: 任务句柄指针